/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package tsb.gestores;


import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import tsb.dominio.conexiones.Conexion;
import tsb.dominio.dispositivos.Dispositivo;
import tsb.dominio.dispositivos.coneccion.Router;
import tsb.dominio.excepciones.MACException;
import tsb.dominio.interfaces.Ethernet;
import tsb.dominio.interfaces.IP;
import tsb.dominio.interfaces.MAC;
import tsb.dominio.network.RedRIP;

/**
 *
 * @author Nico
 */
public class GestorDeDispositivos
{
    tsb.gestores.GestorGrafo gestorGrafo;

    public GestorDeDispositivos(tsb.gestores.GestorGrafo gestorGrafo)
    {
        this.gestorGrafo=gestorGrafo;
    }

    public void setGestorGrafo(tsb.gestores.GestorGrafo gestorGrafo)
    {
        this.gestorGrafo=gestorGrafo;
    }
    public tsb.gestores.GestorGrafo getGestorGrafo()
    {
        return gestorGrafo;
    }

    public boolean agregarDispositivo(int tipoDisp, int x, int y,String nombreAMostrar)
    {
        boolean resultado=false;

         switch(tipoDisp)
            {
                case 0:
                    resultado=false;
                    break;
                case 1:// PC
                   try
                   {
                         MAC mac= new MAC(MAC.generarMAC());
                         IP ip= new IP();
                         IP mascara= new IP();
                         Ethernet et = new Ethernet(true, 1000, ip, mascara, false, true, mac);
                         ArrayList<tsb.dominio.interfaces.InterfaceDeConeccion> interfaces= new ArrayList<tsb.dominio.interfaces.InterfaceDeConeccion>();
                         interfaces.add(et);
                         tsb.dominio.dispositivos.hosfinal.PC pc= new tsb.dominio.dispositivos.hosfinal.PC(x, y, nombreAMostrar,interfaces);
                         //pc.agregarInterfaz(et);
                         gestorGrafo.agregarDispositivo(pc);
                         resultado=true;
                         break;
                   }
                   catch(MACException ex)
                   {
                         Logger.getLogger(GestorDeDispositivos.class.getName()).log(Level.SEVERE, null, ex);      
                   }

                  
                case 2://Router
                    tsb.dominio.dispositivos.coneccion.Router router= new tsb.dominio.dispositivos.coneccion.Router(x, y, nombreAMostrar);
                    gestorGrafo.agregarDispositivo(router);
                    resultado=true;
                    break;
                case 3://Switch
                    try{
                    tsb.dominio.dispositivos.coneccion.Switch switc= new tsb.dominio.dispositivos.coneccion.Switch(x, y, nombreAMostrar);
                    gestorGrafo.agregarDispositivo(switc);
                    }
                    catch(Exception e)
                    {}
                    break;
                case 4://Server
                    tsb.dominio.dispositivos.hosfinal.Server server= new tsb.dominio.dispositivos.hosfinal.Server(x,y, nombreAMostrar);
                    gestorGrafo.agregarDispositivo(server);
                    break;
                case 5://Modem
                    tsb.dominio.dispositivos.coneccion.Modem modem= new   tsb.dominio.dispositivos.coneccion.Modem(x,y,nombreAMostrar);
                    gestorGrafo.agregarDispositivo(modem);
                    break;

            }
        return resultado;
    }
    public boolean actualizarDisp(Dispositivo disp)
    {
        return gestorGrafo.actualizarDispositivo(disp);
    }
    
    public Dispositivo getDispositivo(String nombre)
    {
        return gestorGrafo.getDispositivo(nombre);
    }
    
    public boolean borrarDispositivos(String nombreAMostrar)
    {
        return this.getGestorGrafo().eliminarDispositivo(nombreAMostrar);
    }
    
    public boolean borrarConexion(String nombreAMostrar)
    {
        return this.gestorGrafo.eliminarConexion(nombreAMostrar);
    }

    public void agregarRedARouter(String nombreRouter, String IP) 
    {
        Dispositivo d= this.getDispositivo(nombreRouter);
        if(d instanceof Router)
        {
            Router r=(Router)d;
            
            IP ip= new IP(IP);
        
        //    RedRIP red = new RedRIP(false,ip,new IP());
        
            r.addRed(ip);
        }
    }
    
    public void removerRedARouter(String nombreRouter, String IP)
    {
        Dispositivo d= this.getDispositivo(nombreRouter);
         if(d instanceof Router)
        {
            Router r=(Router)d;
            
            r.removerRed(IP);
        }
    }
}

